Позволяет определить, поддерживает ли данный интерфейс интерфейс lErrorlnfo.
HRESULT InterfaceSupportsErrorInfo ( REFIID riid );
Параметр
riid
Устанавливаетает идентификатор интерфейса.
Коды возврата
Из возвращенного HRESULT получают один из следующих
кодов возврата:
| Код возврата | Значение |
| S_OK | Интерфейс поддерживает lErrorlnfo. |
| S_FALSE | Интерфейс не поддерживает lErrorlnfo. |
Комментарии
Объект, поддерживающий lErrorlnfo, обязан реализовывать
ISupportErrorlnfo.
Программе, получившей код ошибки, следует вызвать
QueryInterface для получения указателя на интерфейс
ISupportErrorlnfo, после чего вызвать InterfaceSupportsErrorlnfo с
IID интерфейса, возвратившего код ошибки. Если
InterfaceSupportsErrorlnfo возвращает S_FALSE, то объект-ошибка
представляет ошибку, возвращенную не вызывавшимся объектом, а кем-то еще. В
данном случае объект-ошибку следует считать неверным и не использовать.
Если
ISupportErrorlnfo возвращает S_OK, то указатель на объект-ошибку
можно получить с помощью GetErrorlnfo.
Пример
Ниже приведена реализация ISupportErrorlnfo из примера
Lines. Эта реализация также поддерживает методы AddRef, Release и
QueryInterface, унаследованные от IUnknown.
CSupportErrorInfo::CSupportErrorInfo(IUnknown FAR* punkObject, REFIID riid)
{
m_punkObject = punkObject;
m_iid = riid;
};
STDMETHODIMP CSupportErrorInfo::QueryInterface(REFIID iid, void FAR* FAR* ppv)
{
return m_punkObject->QueryInterface(iid, ppv);
};
STDMETHODIMP_(ULONG) CSupportErrorlnfo::AddRef (void)
{
return m_punkObject->AddRef();
};
STDMETHODIMP_(ULONG) CSupportErrorlnfo::Release(void)
{
return m_punkObject->Release();
};
STDMETHODIMP CSupportErrorInfo::InterfaceSupportsErrorInfo(REFIID riid)
{
return (riid == m_iid) ? NOERROR : ResultFromScode(S_FALSE);
};